<?php
//Ultima verificacion: 14-10-2014 ; 05-11-2014 ; 21-11-2014 ; 05-03-2015
class M_alumnoxdivision extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//IMPORTANTE! A VECES SE UTILIZA ESTE Y AVECES SE USA EL SIGUIENTE, AUNQUE NO HAYA ACTIVOS E INACTIVOS. FUE UN ERROR DE PROGRAMACION.
	//Este metodo se utiliza cuando queremos obtener los alumnos de una division existentes menos los borrados (-1)
	function buscar($restricciones=null){
		$consulta = $this->db->query("SELECT persona.*, alumnoxdivision.idAxD, alumnoxdivision.idAlumno, 
											(SELECT nombre FROM tipodocumento WHERE tipodocumento.idTipoDocumento=persona.idTipoDocumento AND tipodocumento.estado<>-1 LIMIT 1) AS tipoDocumento,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=persona.idArchivoFoto LIMIT 1) AS hashArchivoFoto,
											(SELECT localidad.nombre FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS localidad,
											(SELECT provincia.nombre FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS provincia,
											DATE_FORMAT(persona.fechaNacimiento,'%d/%m/%Y') AS fechaNacimientoFormateada,
											DATE_FORMAT(usuario.fechaUltimoCierre,'%d/%m/%Y %H:%i:%s') AS fechaUltimoCierreFormateada,
											DATE_FORMAT(alumnoxdivision.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(alumnoxdivision.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM persona, alumno, alumnoxdivision, division, curso, ciclolectivo, turno, usuario
									  WHERE persona.idPersona=alumno.idPersona AND 
											alumno.idAlumno=alumnoxdivision.idAlumno AND 
											alumnoxdivision.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND 
											curso.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											curso.idTurno=turno.idTurno AND 
											usuario.idPersona=persona.idPersona AND
											ciclolectivo.estado<>-1 AND 
											turno.estado=1 AND 
											curso.estado=1 AND 
											division.estado=1 AND
											alumnoxdivision.estado>-1 AND 
											alumno.estado=1 AND 
											usuario.estado<>-1 AND 
											persona.estado=1 $restricciones
									  ORDER BY persona.apellido ASC, persona.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los alumnos de una division activos. O bien las divisiones que cursa un alumno.
	function buscarActivos($restricciones=null, $orderBy=null, $limite=null){
		if($orderBy==null)	$orderBy = "persona.apellido ASC, persona.nombre ASC";
		
		$consulta = $this->db->query("SELECT persona.*, alumnoxdivision.idAxD, alumnoxdivision.idAlumno, alumnoxdivision.cantidadFaltas, alumnoxdivision.cantidadSanciones, alumnoxdivision.cantidadEvaluacionesDesaprobadas,  division.nombre AS division, division.idDivision AS idDivision, curso.nombre AS curso, curso.abreviatura AS abreviaturaCurso, ciclolectivo.nombre AS cicloLectivo, ciclolectivo.idCicloLectivo AS idCicloLectivo,
											(SELECT nombre FROM tipodocumento WHERE tipodocumento.idTipoDocumento=persona.idTipoDocumento AND tipodocumento.estado<>-1 LIMIT 1) AS tipoDocumento,
											(SELECT hash FROM archivo WHERE archivo.idArchivo=persona.idArchivoFoto LIMIT 1) AS hashArchivoFoto,
											(SELECT localidad.nombre FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS localidad,
											(SELECT provincia.nombre FROM localidad, provincia WHERE localidad.idProvincia=provincia.idProvincia AND localidad.idLocalidad=persona.idLocalidad AND localidad.estado<>-1 AND provincia.estado<>-1) AS provincia,
											DATE_FORMAT(persona.fechaNacimiento,'%d/%m/%Y') AS fechaNacimientoFormateada,
											DATE_FORMAT(usuario.fechaUltimoCierre,'%d/%m/%Y %H:%i:%s') AS fechaUltimoCierreFormateada,
											DATE_FORMAT(alumnoxdivision.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											DATE_FORMAT(alumnoxdivision.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM persona, alumno, alumnoxdivision, division, curso, ciclolectivo, turno, usuario
									  WHERE persona.idPersona=alumno.idPersona AND 
											alumno.idAlumno=alumnoxdivision.idAlumno AND 
											alumnoxdivision.idDivision=division.idDivision AND 
											division.idCurso=curso.idCurso AND 
											curso.idCicloLectivo=ciclolectivo.idCicloLectivo AND 
											curso.idTurno=turno.idTurno AND 
											usuario.idPersona=persona.idPersona AND
											ciclolectivo.estado<>-1 AND 
											turno.estado=1 AND 
											curso.estado=1 AND 
											division.estado=1 AND
											alumnoxdivision.estado=1 AND 
											alumno.estado=1 AND 
											usuario.estado<>-1 AND 
											persona.estado=1 $restricciones
									  ORDER BY $orderBy 
									  $limite");
		return($consulta);
	}
			
	//Este metodo se utiliza para eliminar un alumno de una division, es decir, eliminar una asignacion
	function eliminar($idAxD=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `alumnoxdivision`
									 SET `estado` = ".-rand(1,100000000).",
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `alumnoxdivision`.`idAxD` = " . $this->db->escape($idAxD) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para agregar un alumno a una division
	function crear($idAlumno=null, $idDivision=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `alumnoxdivision` (`idAxD`,`idAlumno`,`idDivision`,`estado`,`fechaCreacion`,`idCreador`) VALUES 
														(NULL,".$this->db->escape($idAlumno).",".$this->db->escape($idDivision).",".$this->db->escape($estado).",now(),".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
			
	//Este metodo se utiliza cuando queremos devolver una asignacion de alumno en particular usada generalmente para verificar que exista
	function get($idAxD=null){
		$consulta = $this->db->query("SELECT alumnoxdivision.*, persona.idPersona
									  FROM alumnoxdivision, alumno, persona
									  WHERE alumnoxdivision.idAlumno=alumno.idAlumno AND
											alumno.idPersona=persona.idPersona AND									  
											alumnoxdivision.estado>-1 AND 
											alumno.estado<>-1 AND 
											persona.estado<>-1 AND 
											alumnoxdivision.idAxD=".$this->db->escape($idAxD)."
									  LIMIT 1");
		return($consulta);
	}
			
	//Este metodo se utiliza cuando queremos saber si un alumno esta asignado a alguna division en un ciclo lectivo
	function get2($idCicloLectivo=null, $idAlumno=null){
		$consulta = $this->db->query("SELECT alumnoxdivision.*
									  FROM curso, division, alumnoxdivision, alumno, persona
									  WHERE curso.idCurso=division.idCurso AND
											division.idDivision=alumnoxdivision.idDivision AND
											alumnoxdivision.idAlumno=alumno.idAlumno AND
											alumno.idPersona=persona.idPersona AND									  
											curso.estado<>-1 AND 
											division.estado<>-1 AND 
											alumnoxdivision.estado>-1 AND 
											alumno.estado<>-1 AND 
											persona.estado<>-1 AND 
											curso.idCicloLectivo=".$this->db->escape($idCicloLectivo)." AND
											alumnoxdivision.idAlumno=".$this->db->escape($idAlumno)."
									  LIMIT 1");
		return($consulta);
	}
			
	//Este metodo se utiliza para modificar un alumno de una division
	//NO SE USA.
	function modificar($idAxD=null, $estado=null){
		$consulta = $this->db->query("UPDATE `alumnoxdivision` 
									 SET `estado` = ". $this->db->escape($estado) ."
							         WHERE `alumnoxdivision`.`idAxD`=".$this->db->escape($idAxD)." LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>